package Number;

import java.math.BigDecimal;
import java.util.Scanner;

//解决浮点数运算不精确的问题
public class TestBigDecimal {

    public static void main(String[] args) {

//        f1();//使用普通的四则运算计算浮点型的数据
        f2();//使用BigDecimal来解决浮点数运算不精确的问题

    }

    private static void f2() {
        System.out.println("请输入您要计算的两个小数：");
        double b1 = new Scanner(System.in).nextDouble();
        double b2 = new Scanner(System.in).nextDouble();

        //最好不要使用double作为构造函数的参数
        //最好使用重载的构造函数：参数为String的构造函数
        //double转String，直接拼一个空串就可以
        BigDecimal bigDecimal1 = new BigDecimal(b1+"");//利用+符号将b1转换为String类型
        BigDecimal bigDecimal2 = new BigDecimal(b2+"");//利用+符号将b2转换为String类型
        BigDecimal bigDecimal3;

//可以精确计算浮点数
        bigDecimal3 = bigDecimal1.subtract(bigDecimal2);//减法
        System.out.println(bigDecimal3);
        bigDecimal3 = bigDecimal1.add(bigDecimal2);//加法
        System.out.println(bigDecimal3);
        bigDecimal3 = bigDecimal1.multiply(bigDecimal2);//乘法
        System.out.println(bigDecimal3);
        //除不尽时会报错
//        bigDecimal3 = bigDecimal1.divide(bigDecimal2);//除法
//        System.out.println(bigDecimal3);
        //divide(m,n,o)m代表除以那个对象，n代表除不尽时保留几位数，o代表的是舍入方式
        bigDecimal3 = bigDecimal1.divide(bigDecimal2,3,BigDecimal.ROUND_HALF_UP);//除法
        System.out.println(bigDecimal3);



    }

    private static void f1() {
        //提示并接受用户输入的两个小数
        System.out.println("请输入您要计算的两个小数：");
        double b1 = new Scanner(System.in).nextDouble();
        double b2 = new Scanner(System.in).nextDouble();

        System.out.println(b1 + b2);
        System.out.println(b1 - b2);
        System.out.println(b1 * b2);
        System.out.println(b1 / b2);

    }
}
